iT邦幫忙

2025 iThome 鐵人賽

DAY 1
0
Software Development

30 天 Python 專案工坊:環境、結構、測試到部署全打通系列 第 1

Day 1 - 為什麼要「工程化的 Python」:系列導讀與範例專案藍圖

  • 分享至 

  • xImage
  •  

從小腳本到工程化

還記得在我學生時期,Python 這個程式語言幾乎不是一個熱門話題。事實上,Python 早在 1980 年代末就已經誕生,但直到 2000 年之後,才逐漸有人開始討論它。即便如此,那時候的 Python,大多還只是被視為一種腳本語言,通常用來解決一些比較小型的問題,例如:撰寫批次處理的作業腳本,或是建置一些輕量級的網站應用。 真正讓 Python 開始被廣泛重視,是在 2014 年前後。

隨著機器學習與深度學習的討論逐漸熱絡,Python 因為生態圈中有像 NumPy、TensorFlow、PyTorch 這些強大的工具,而一躍成為主流語言之一。即使 Python 本身並不是一個特別高效能的語言(它的執行速度往往不及 C 或 Java),但它能「快」的原因,是因為底層的高效能套件大多以 C/C++ 撰寫,Python 則提供了簡單、直覺的介面。 隨著時間推移,Python 的應用場景也從「小腳本」逐步擴展到「大型專案」。然而,這也帶來了一個新的問題:Python 缺乏像 Java、.NET Core 那樣明確的標準專案結構與工程化工具。在這樣的背景下,近幾年才逐漸出現了一些專案管理與環境管理的解決方案,其中一個讓我眼睛一亮的工具就是 Hatch。


為什麼要工程化?

當一個 Python 專案成長到一定規模,如果沒有採用工程化的框架或規範,往往會陷入一場維運的災難。 我本身是一位後端 Java 工程師,參與過許多不同規模的專案: - 小型專案,如果結構清晰,維護通常不難。 - 但在大型專案裡,如果沒有「工程標準」,開發者與維運團隊往往會痛苦不堪。 這樣的經驗讓我意識到,Python 雖然靈活、好上手,但當它要承擔更大規模的專案時,也必須用「工程化」的角度來看待。這也是我在這次 30 天鐵人挑戰 中想要分享的核心:用工程化的方式,重新審視 Python 開發。

我們可以從幾個角度來理解工程化的價值:

  • 可維護性:程式碼有清楚的結構,檔案命名合理,半年後回來看也能理解。

  • 一致性:不論在哪個環境執行(本地、伺服器、CI/CD pipeline),結果都一致。

  • 可測試性:自動化測試能幫助驗證功能是否正確,降低人為錯誤風險。

  • 可擴展性:專案從小腳本逐漸成長時,不需要推倒重來,而是能自然演進。

系列導讀:30 天的學習路線圖

Day 1 - 為什麼要「工程化的 Python」:系列導讀與範例專案藍圖

Day 2 - Python 環境管理:venv、conda 與 hatch 的選擇

Day 3 - pyproject.toml:現代 Python 專案的核心設定檔

Day 4 - 專案目錄結構:從腳本到可維護的專案設計

Day 5 - Hatch 基本操作:建立與管理虛擬環境

Day 6 - 依賴管理策略:直接安裝 vs. 鎖定版本

Day 7 -可重現環境策略:constraints / lock 與快取

Day 8 - 一鍵化開發工作流:Hatch scripts × Nox

Day 9 - 風格統一:Black + Ruff + isort + pre-commit

Day 10 -型別與資料契約:mypy / pyright 與 Pydantic v2

Day 11 - 測試策略藍圖:pytest 目錄結構、fixtures 與 coverage

Day 12 -設定與祕密管理:dotenv、pydantic-settings、雲端祕密服務

Day 13 - 結構化日誌:logging/structlog 與 JSON Log

Day 14 - 失敗即常態:例外分層、重試與降級(tenacity)

Day 15 -序列化與設定格式:orjson、YAML、TOML 實務

Day 16 -非同步基礎:asyncio / anyio 的落地心法

Day 17 -效能觀測:cProfile、py-spy、line-profiler

Day 18 -快取策略:lru_cache、Redis 與失效設計

Day 19 -資料層工程化:SQLAlchemy 2.x 與 Repository Pattern

Day 20 -API 層:用 FastAPI 落實 Ports/Adapters(六邊形味道)

Day 21 -背景作業選型:Celery / Dramatiq / asyncio 任務

Day 22 -發佈與版本:Hatch build wheel、SemVer、Changelog

Day 23 -容器化最佳實務:多階段 Dockerfile 與非 root 執行

Day 24 - 開發體驗:Dev Container / VS Code 與 Hatch scripts

Day 25 -CI/CD 範本:GitHub Actions(lint → test → build → publish)

Day 26 -安全與授權:pip-audit、Safety、授權掃描

Day 27 -部署選項速覽:Gunicorn/Uvicorn、Cloud Run / K8s

Day 28 -監控與追蹤:OpenTelemetry 指標/追蹤

Day 29 - Vibe Coding × AI 協作:自動化腳本與守門規則

Day 30 -總結與交付:Checklist、FAQ、模板釋出

結尾

今天只是我們的起點,先把「為什麼要工程化」這件事放在腦海裡。 接下來的 30 天,我會一步一步帶你從環境管理、專案結構、工具鏈、測試,到最後的發佈與部署,完整走過一遍工程化 Python 的實踐之路。 這不是一蹴可幾的過程,而是透過每天一點一滴的累積,逐漸把「寫程式」的習慣,轉化為「打造可維護專案」的思維。或許一開始會覺得麻煩,但當你看到專案能穩定成長、團隊協作變得順暢,那種成就感絕對值得。

明天開始,我們會從 Python 的「環境管理」談起,帶你比較 venv、conda 與 hatch,看看該如何建立一個乾淨且可重現的開發環境。

我們就一步一腳印地往前走,每天多學一點,讓自己與專案一同變強大。 🚀

參考文獻


下一篇
Day 2 - Python 環境管理:venv、conda 與 hatch 的選擇
系列文
30 天 Python 專案工坊:環境、結構、測試到部署全打通8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言